import { Expose } from "class-transformer";

// 同步前端接口定义
interface CustomizeRouteMeta {
    /** 菜单ID */
    id?: string;
    /** 父级菜单ID */
    parentId?: string | null;
    /** 祖先路径列表 */
    pathList?: string[];
    /** 菜单名称（兼容国际化、非国际化，如何用国际化的写法就必须在根目录的`locales`文件夹下对应添加） `必填` */
    title: string;
    /** 菜单图标 `可选` */
    icon?: string;
    /** 菜单类型（menu代表菜单、iframe代表iframe、external代表外链、button代表按钮权限） */
    menuType?: "menu" | "iframe" | "external" | "button";
    /** 菜单名称右侧的额外图标 */
    extraIcon?: string;
    /** 是否在菜单中显示（默认`true`）`可选` */
    showLink?: boolean;
    /** 页面级别权限设置 `可选` */
    roles?: Array<string>;
    /** 按钮级别权限设置 `可选` */
    auths?: Array<string>;
    /** 路由组件缓存（开启 `true`、关闭 `false`）`可选` */
    keepAlive?: boolean;
    /** 内嵌的`iframe`链接 `可选` */
    frameSrc?: string;
    /** 当前菜单名称或自定义信息禁止添加到标签页（默认`false`） */
    hiddenTag?: boolean;
    /** 当前菜单名称是否固定显示在标签页且不可关闭（默认`false`） */
    fixedTag?: boolean;
    /** 动态路由可打开的最大数量 `可选` */
    dynamicLevel?: number;
    /** 将某个菜单激活
     * （主要用于通过`query`或`params`传参的路由，当它们通过配置`showLink: false`后不在菜单中显示，就不会有任何菜单高亮，
     * 而通过设置`activePath`指定激活菜单即可获得高亮，`activePath`为指定激活菜单的`path`）
     */
    activePath?: string;
    /** 菜单升序排序，值越高排的越后 */
    rank?: number;
}

export class MenuDetailVo {
    @Expose()
    id!: string;

    @Expose()
    parentId!: string | null;

    @Expose()
    path!: string;

    @Expose()
    name!: string | null;

    @Expose()
    redirect!: string | null;

    @Expose()
    component!: string | null;

    @Expose()
    meta!: CustomizeRouteMeta | null;
}
